package mongo

import (
	"crypto/md5"
	"crypto/rand"
	"encoding/hex"
	"gopkg.in/mgo.v2/bson"
	"io"
)

type NewId interface {
	CreateId() error
}

type EmailInfo struct {
	// 发送详情
	Id         string `bson:"id" json:"id"`
	Nickname   string `bson:"nickname" json:"nickname"` // 接收者或者发送者的昵称
	Status     int    `bson:"status" json:"status"`                     //  1未阅读 2已阅读
	Contents   string `bson:"contents" json:"contents"`
	CreateTime int64  `bson:"create_time" json:"create_time"`
}

type Email struct {
	// 发件箱
	Id        bson.ObjectId `bson:"_id" json:"id"`
	Type      int           `bson:"type" json:"type"` // 发件箱 type = 1 收件箱 type=2
	UserId    string        `bson:"user_id" json:"user_id"`
	EmailList []*EmailInfo  `bson:"email_list" json:"email_list"`
}

func NewEmail(emailType int, userId string) *Email {

	return &Email{
		Id:        bson.NewObjectId(),
		Type:      emailType,
		UserId:    userId,
		EmailList: nil,
	}
}

/**** 生成邮件ID  ***/
func (emailInfo *EmailInfo) CreateId() error {
	b := make([]byte, 48)
	if _, err := io.ReadFull(rand.Reader, b); err != nil {
		return err
	}
	h := md5.New()
	h.Write([]byte(b))
	uniqueId := hex.EncodeToString(h.Sum(nil))
	emailInfo.Id = uniqueId
	return nil
}
